/*
 * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.iec.edp.caf.lockservice.core.repositories;


import io.iec.edp.caf.lockservice.api.BatchLockEntity;
import io.iec.edp.caf.lockservice.api.LockEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.time.OffsetDateTime;
import java.util.List;

@Deprecated
//todo 被io.iec.edp.caf.distribute.lockmanagement.config.LockManagementConfig依赖
public interface BatchLockRepository extends JpaRepository<BatchLockEntity,String> {


    List<BatchLockEntity> findAllByMkIdAndCategoryIdAndDataIdIn(String mkId, String categoryId, List<String> dataIds);

    @Modifying
    @Query("delete from BatchLockEntity b where b.expiredTime < :expiredTime")
    @Transactional(propagation= Propagation.REQUIRES_NEW)
    void deleteByExpiredTime(@Param("expiredTime") OffsetDateTime expiredTime);

    @Transactional(propagation= Propagation.REQUIRES_NEW)
    @Modifying
    @Query("delete from BatchLockEntity b where b.groupId = :groupId")
    void deleteByGroupId(String groupId);

    @Transactional(propagation= Propagation.REQUIRES_NEW)
    void deleteAllByIdIn(List<String> lockIds);

    List<BatchLockEntity> findByMkIdAndCategoryId(String mkId, String categoryId);
    List<BatchLockEntity> findByMkIdAndCategoryIdAndSuName(String mkId, String categoryId,String su);

    List<BatchLockEntity> findByMkIdNotInAndCategoryIdNotIn(List<String> mkId, List<String>categoryId);
}
